Exemples
Chaque page de la section API contient des exemples de sa fonctionnalité. Les exemples ci-dessous combinent plusieurs fonctionnalités.
Détection de la main
La couleur des LEDs dépend du côté où une main est détectée, blanc pour le capteur du dessus.
import olem
print("Starting ir hand detection test")
start_timestamp = olem.get_time_ms()
while (olem.get_time_ms() - start_timestamp) < 20000:
olem.led_off(olem.LEDALL)
if (olem.ir_side_is_hand_present(olem.FRONT)):
olem.led_on(olem.LEDALL, "#FF0000")
if (olem.ir_side_is_hand_present(olem.RIGHT)):
olem.led_on(olem.LEDALL, "#00FF00")
if (olem.ir_side_is_hand_present(olem.BACK)):
olem.led_on(olem.LEDALL, "#0000FF")
if (olem.ir_side_is_hand_present(olem.LEFT)):
olem.led_on(olem.LEDALL, "#00FFFF")
if (olem.ir_top_is_hand_present()):
olem.led_on(olem.LEDALL, "#FFFFFF")
olem.delay_ms(100)
print("End ir hand detection test")
Module d'extension - GPIO et capteurs IR
La broche P1 est à HIGH quand une main est devant OLEM, la broche P2 quand une main est derrière.
import olem
print("Starting extension module gpio ir test")
olem.extmod_mode_set(olem.EXTMOD_GPIO)
timestamp_start = olem.get_time_ms()
while ((olem.get_time_ms() - timestamp_start) < 20000):
if (olem.ir_side_is_hand_present(olem.FRONT)):
olem.extmod_gpio_set(olem.EXTMOD_GPIO1, olem.HIGH)
else:
olem.extmod_gpio_set(olem.EXTMOD_GPIO1, olem.LOW)
if (olem.ir_side_is_hand_present(olem.BACK)):
olem.extmod_gpio_set(olem.EXTMOD_GPIO2, olem.HIGH)
else:
olem.extmod_gpio_set(olem.EXTMOD_GPIO2, olem.LOW)
olem.extmod_gpio_set(olem.EXTMOD_GPIO1, olem.LOW)
olem.extmod_gpio_set(olem.EXTMOD_GPIO2, olem.LOW)
print("End of extension module gpio ir test")
Utiliser la force (à corriger)

import olem
THRESHOLD = 500
DEADZONE = 100
MIN_VALUE = 150
STEP = 20
MAX_SPEED = 10 / 10
def get_translation(value):
translation = (value - THRESHOLD) / THRESHOLD
if abs(value - THRESHOLD) < DEADZONE:
return 0
else:
return translation
def set_speed(x, y):
if abs(x) > abs(y):
speed = abs(x)
else:
speed = abs(y)
speed = speed + 1 / 2
if (speed > MAX_SPEED):
olem.set_move_speed(MAX_SPEED)
else:
olem.set_move_speed(speed)
def force_loop():
x = 0
y = 0
front = olem.ir_side_get_sensor_value(olem.FRONT)
right = olem.ir_side_get_sensor_value(olem.RIGHT)
back = olem.ir_side_get_sensor_value(olem.BACK)
left = olem.ir_side_get_sensor_value(olem.LEFT)
# Calculer les déplacements
if front > MIN_VALUE:
x -= get_translation(front)
if back > MIN_VALUE:
x += get_translation(back)
if right > MIN_VALUE:
y -= get_translation(right)
if left > MIN_VALUE:
y += get_translation(left)
# Adapter la vitesse aux déplacements
set_speed(x, y)
if x != 0 or y != 0:
if (x != 0):
x = x / abs(x) * STEP
if (y != 0):
y = y / abs(y) * STEP
olem.move(x, y, 0)
#########################################################
#########################################################
#########################################################
olem.led_off(olem.LEDALL)
# Attendre un appui sur le bouton
while olem.get_power_button_state() == 1:
olem.delay_ms(20)
# Afficher le logo et allumer les LEDs
img = olem.display_img("/common/images/olem_logo.bin")
olem.led_on(olem.LEDALL, "#FFFFFF")
# Changer le filtre pour une détection plus rapide
olem.ir_side_set_filter(2)
while not olem.ir_top_is_hand_present():
force_loop()